# -*-coding:utf-8-*-
import numpy as np

"""
广播
"""

a = np.array([1, 2, 3, 4])
b = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])
c = np.array([2, 2, 2, 2])
d = np.array([[2, 2, 2, 2], [2, 2, 2, 2], [2, 2, 2, 2]])
e = np.array([[2], [3], [4]])
f = np.array([[1, 2, 3, 4]])

# 各维度大小完全相同的两个数组，对应位置元素直接运算
r1 = a*c  # [2 4 6 8]
r2 = b*d  # [[2 4 6 8] [10 12 14 16] [18 20 22 24]]

# 数组的维度不同，后缘所有维度的轴长相符。
# b(3,4)和a(4,)的后缘维度轴长都为(4,)
r3 = b+a  # [[2 4 6 8] [6 8 10 12] [10 12 14 16]],a会广播成[[1 2 3 4] [1 2 3 4] [1 2 3 4]]

# 数组维度相同，其中有个轴为1。
# b(3,4)和e(3,1)中e的y轴长为1。b(3,4)和f(1,4)中f的x轴长为1
r4 = b+e  # [[3 4 5 6] [8 9 10 11] [13 14 15 16]],e会广播成[[2 2 2 2] [3 3 3 3] [4 4 4 4]]
r5 = b+f  # [[2 4 6 8] [6 8 10 12] [10 12 14 16]],f会广播成[[1 2 3 4] [1 2 3 4] [1 2 3 4]]

# 数组和单个元素运算，单个元素会广播成与数组相同的结构
r6 = b*2  # [[2 4 6 8] [10 12 14 16] [18 20 22 24]]
